package main

import (
	cf "BackupDatabase/config"
	"BackupDatabase/core"
	"BackupDatabase/logger"
	"fmt"
	"github.com/robfig/cron/v3"
	"go.uber.org/zap"
	"net"
	"time"
)

var backCore *core.BackCore

func init() {
	_, err := net.Listen("tcp", ":41841") // 监听一个端口，确保程序只能运行一个
	if err != nil {
		panic(err)
	}

	err = cf.Init("config.yaml")
	if err != nil {
		panic(err)
	}
	err = logger.Init()
	if err != nil {
		panic(err)
	}

	bore, err := core.NewBackCore(cf.Config, cf.Config.Back.FileName)
	if err != nil {
		zap.L().Fatal("运行错误", zap.Error(err))
	}
	backCore = bore
}

func run() {
	start := time.Now() // 获取当前时间
	zap.L().Info("备份程序开始执行...")
	backCore.Run()
	elapsed := time.Now().Sub(start)
	zap.L().Info("备份程序执行结束...", zap.String("总耗时", elapsed.String()))
	fmt.Println("执行完毕，总耗时：", elapsed)
	err := backCore.Reset()
	if err != nil {
		zap.L().Fatal("程序重置失败...", zap.Error(err))
	}
}

// main 备份表
func main() {
	zap.L().Info("启动数据库备份脚本...")
	cro := cron.New(cron.WithSeconds())
	_, err := cro.AddFunc(cf.Config.Back.Timer, run)
	if err != nil {
		panic(err)
	}
	cro.Start()
	zap.L().Info("数据库备份脚本启动成功...")
	select {}
}
